package com.tengju.user.domain.shared;

import org.apache.commons.lang3.StringUtils;

/**
 * 定义脱敏类型
 *
 * @Author: 李大仙
 * @Date: 2021/4/9 6:01 下午
 */
public enum SensitiveFieldType {

    /**
     * 姓名
     */
    NAME("name", "用户姓名"),
    /**
     * 手机号
     */
    MOBILE("phone", "11位手机号"),
    /**
     * 身份证
     */
    IDENTITY_NO("identityNo", "16或者18身份证号"),

    /**
     * 银行卡
     */
    BANKCARD_NO("bankCardNo", "银行卡号"),

    /**
     * 公司/个人地址
     */
    COMPANY_ADDRESS("company_address", "公司/个人地址"),

    /**
     * 税号
     */
    DUTY_PARAGRAPH("duty paragraph", "税号"),

    /**
     * 非通用业务扩展定义
     */
    CUSTOM("custom", "自定义正则处理"),

    TRUNCATE("truncate", "字符串截取处理"),
    ;

    String type;

    String describe;


    SensitiveFieldType(String type, String describe) {
        this.type = type;
        this.describe = describe;
    }

    public String getType() {
        return type;
    }

    public String getDescribe() {
        return describe;
    }

    public String dealData(String value) {
        if (StringUtils.isBlank(value)) {
            return value;
        }
        //判断长度是否为2，若为2则认为是姓名，只脱最后一位
        if (SensitiveFieldType.NAME.equals(this)) {
            if (value.length() > 2) {
                return StringUtils.left(value, 1).concat(StringUtils.leftPad(StringUtils.right(value, 1), StringUtils.length(value) - 1, "*"));
            }
            return value.charAt(0) + "*";
        } else if (SensitiveFieldType.MOBILE.equals(this) || SensitiveFieldType.IDENTITY_NO.equals(this)) {
            if (value.startsWith("+")) {
                return StringUtils.left(value, 5).concat(StringUtils.leftPad(StringUtils.right(value, 4), StringUtils.length(value) - 5, "*"));
            }
            //国外手机号
            return StringUtils.left(value, 3).concat(StringUtils.leftPad(StringUtils.right(value, 4), StringUtils.length(value) - 3, "*"));
        } else if (SensitiveFieldType.BANKCARD_NO.equals(this)) {
            //银行卡号处理
            return StringUtils.left(value, 6).concat(StringUtils.leftPad(StringUtils.right(value, 4), StringUtils.length(value) - 6, "*"));
        } else if (SensitiveFieldType.COMPANY_ADDRESS.equals(this)) {
            //公司地址处理
            return StringUtils.rightPad(StringUtils.left(value, 3), StringUtils.length(value), "*");
        } else if (SensitiveFieldType.DUTY_PARAGRAPH.equals(this)) {
            //税号处理
            return "****";
        }
        return value;
    }

}
